
extern "C" __declspec(dllexport) void GUIElement_AddChild(IGUIElement *guiElement, IGUIElement *child) 
{
	guiElement->addChild(child);
}

extern "C" __declspec(dllexport) bool GUIElement_BringToFront(IGUIElement *guiElement, IGUIElement *element)
{
	return guiElement->bringToFront(element);
}

extern "C" __declspec(dllexport) void GUIElement_Draw(IGUIElement *guiElement)
{
	guiElement->draw();
}

extern "C" __declspec(dllexport) void GUIElement_GetAbsoluteClippingRect(IGUIElement *guiElement, s32 &lowerX, s32 &lowerY, s32 &upperX, s32 &upperY)
{
	core::rect<s32> rect = guiElement->getAbsoluteClippingRect();
	lowerX = rect.LowerRightCorner.X;
	lowerY = rect.LowerRightCorner.Y;
	upperX = rect.UpperLeftCorner.X;
	upperY = rect.UpperLeftCorner.Y;
}

extern "C" __declspec(dllexport) void GUIElement_GetAbsolutePosition(IGUIElement *guiElement, s32 &lowerX, s32 &lowerY, s32 &upperX, s32 &upperY)
{
	core::rect<s32> rect = guiElement->getAbsolutePosition();
	lowerX = rect.LowerRightCorner.X;
	lowerY = rect.LowerRightCorner.Y;
	upperX = rect.UpperLeftCorner.X;
	upperY = rect.UpperLeftCorner.Y;
}

extern "C" __declspec(dllexport) bool GUIElement_IsVisible(IGUIElement *guiElement)
{
	return guiElement->isVisible();
}

extern "C" __declspec(dllexport) void GUIElement_SetVisible(IGUIElement *guiElement, bool visible)
{
	guiElement->setVisible(visible);
}
 
extern "C" __declspec(dllexport) void GUIElement_Move(IGUIElement *guiElement, s32 x, s32 y) 
{
	guiElement->move(core::position2d<s32>(x, y));
}

extern "C" __declspec(dllexport) void GUIElement_OnPostRender(IGUIElement *guiElement, u32 timeMs) 
{
	guiElement->OnPostRender(timeMs);
}
 
extern "C" __declspec(dllexport) void GUIElement_Remove(IGUIElement *guiElement) 
{
	guiElement->remove();
}
 
extern "C" __declspec(dllexport) void GUIElement_RemoveChild(IGUIElement *guiElement, IGUIElement *child) 
{
	guiElement->removeChild(child);
}

extern "C" __declspec(dllexport) IGUIElement * GUIElement_GetElementFromId(IGUIElement *guiElement, s32 id, bool searchchildren)
{
	return guiElement->getElementFromId(id, searchchildren);
}
 
extern "C" __declspec(dllexport) IGUIElement * GUIElement_GetElementFromPoint(IGUIElement *guiElement, s32 x, s32 y)
{
	return guiElement->getElementFromPoint(core::position2d<s32>(x, y));
}

extern "C" __declspec(dllexport) s32 GUIElement_GetID(IGUIElement *guiElement)
{
	return guiElement->getID();
}

extern "C" __declspec(dllexport) bool GUIElement_GetNextElement(IGUIElement *guiElement, s32 startOrder, bool reverse, bool group, IGUIElement *&first, IGUIElement *&closest, bool includeInvisible)
{
	return guiElement->getNextElement(startOrder, reverse, group, first, closest, includeInvisible);
}
 
extern "C" __declspec(dllexport) IGUIElement * GUIElement_GetParent(IGUIElement *guiElement)
{
	return guiElement->getParent();
}
 
extern "C" __declspec(dllexport) void GUIElement_GetRelativePosition(IGUIElement *guiElement, s32 &lowerX, s32 &lowerY, s32 &upperX, s32 &upperY)
{
	core::rect<s32> rect = guiElement->getRelativePosition();
	lowerX = rect.LowerRightCorner.X;
	lowerY = rect.LowerRightCorner.Y;
	upperX = rect.UpperLeftCorner.X;
	upperY = rect.UpperLeftCorner.Y;
}
 
extern "C" __declspec(dllexport) IGUIElement * GUIElement_GetTabGroup(IGUIElement *guiElement) 
{
	return guiElement->getTabGroup();
}
 
extern "C" __declspec(dllexport) s32 GUIElement_GetTabOrder(IGUIElement *guiElement)   
{
	return guiElement->getTabOrder();
}
 
extern "C" __declspec(dllexport) const wchar_t * GUIElement_GetText(IGUIElement *guiElement)
{
	return guiElement->getText();
}
 
extern "C" __declspec(dllexport) const core::stringw & GUIElement_GetToolTipText(IGUIElement *guiElement)
{
	return guiElement->getToolTipText();
}
 
extern "C" __declspec(dllexport) EGUI_ELEMENT_TYPE GUIElement_GetType(IGUIElement *guiElement)
{
	return guiElement->getType();
}
 
extern "C" __declspec(dllexport)  const c8 * GUIElement_GetTypeName(IGUIElement *guiElement)   
{
	return guiElement->getTypeName();
}

extern "C" __declspec(dllexport) bool GUIElement_IsEnabled(IGUIElement *guiElement)
{
	return guiElement->isEnabled();
}

extern "C" __declspec(dllexport) void GUIElement_SetTabGroup(IGUIElement *guiElement, bool isGroup)
{
	guiElement->setTabGroup(isGroup);
}
 
extern "C" __declspec(dllexport) void GUIElement_SetTabOrder(IGUIElement *guiElement, s32 index) 
{
	guiElement->setTabOrder(index);
}

extern "C" __declspec(dllexport) void GUIElement_SetTabStop(IGUIElement *guiElement, bool enable) 
{
	guiElement->setTabStop(enable);
}

extern "C" __declspec(dllexport) void GUIElement_SetText(IGUIElement *guiElement, const wchar_t *text) 
{
	guiElement->setText(text);
}

extern "C" __declspec(dllexport) void GUIElement_SetToolTipText(IGUIElement *guiElement, const wchar_t *text) 
{
	guiElement->setToolTipText(text);
}

extern "C" __declspec(dllexport) bool GUIElement_IsTabStop(IGUIElement *guiElement)
{
	return guiElement->isTabStop();
}

extern "C" __declspec(dllexport) void GUIElement_SetEnabled(IGUIElement *guiElement, bool enabled)
{
	guiElement->setEnabled(enabled);
}

extern "C" __declspec(dllexport) void GUIElement_SetID(IGUIElement *guiElement, s32 id)
{
	guiElement->setID(id);
}
